package com.eastfair.config.service;

import com.eastfair.boot.service.SuperCacheService;
import com.eastfair.config.dto.ConfigAttributeValueDTO;
import com.eastfair.config.entity.ConfigAttributeValue;

import java.util.List;

/**
 * <p>
 * 业务接口
 *
 * </p>
 *
 * @author zjn
 * @date 2021-08-05
 */
public interface ConfigAttributeValueService extends SuperCacheService<ConfigAttributeValue> {

    /**
     * 新增一条配置记录
     *
     * @param data 属性值
     */
    void insertConfiguration(List<ConfigAttributeValueDTO> data);

    /**
     * 查询某实体列表内部
     *
     * @param clazz 配置项实体的类名
     * @param <T>   泛型
     * @return 实体列表
     */
    <T> List<T> listEntityByClass(Class<T> clazz);

    /**
     * 查询某实体内部
     *
     * @param clazz 配置项实体的类名
     * @param <T>   泛型
     * @return 实体列表
     */
    <T> T getEntityByClass(Class<T> clazz);

    /**
     * 查询某实体列表（外部）
     *
     * @param className 配置项实体的类名
     * @return 实体object类
     */
    List<Object> listObjectByEntityClass(String className);

    /**
     * 通过 标识id、属性id 修改值
     *
     * @param flagId            标识id
     * @param configAttributeId 属性id
     * @param value             修改值
     * @return 是否修改成功
     */
    Boolean updateValue(Long flagId, Long configAttributeId, String value);

    /**
     * 修改配置项实体
     * flagId为必传参数
     * 其他属性至少传递一个值
     *
     * @param t   实体
     * @param <T>
     * @return 是否成功
     */
    <T> Boolean updateEntity(T t);

    /**
     * 新增配置项实体
     *
     * @param t   实体
     * @param <T>
     * @return 是否成功
     */
    <T> Boolean saveEntity(T t);
}
